home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 02 - 1986 / 02.12 Dec 86.sit / 02.12 Dec 86 / basic Sources / Lightspeed Pascal / Printing < prev   
Encoding:
Text File  |  1986-11-10  |  7.3 KB  |  317 lines  |  [TEXT/PJMM]

  1. { Printdemo program by Dave Kelly }
  2. { for MacTutor Dec 1986}
  3. { Lightspeed Pascal 1.0}
  4.  
  5. PROGRAM Printdemo;
  6.     USES
  7.         MacPrint;
  8.  
  9.     CONST
  10.         appleID = 1;
  11.         fileID = 2;
  12.         appleMenu = 1;
  13.         fileMenu = 2;
  14.         menuCount = 2;
  15.         printscr = 1;
  16.         printptr = 2;
  17.         pagesetup = 3;
  18.         Jobsetup = 4;
  19.         clrscr = 6;
  20.         quit = 7;
  21.         plainDBox = 2;
  22.  
  23.     VAR
  24.         myMenus : ARRAY[1..menuCount] OF MenuHandle;
  25.         theChar : CHAR;
  26.         extended : BOOLEAN;
  27.         doneFlag : BOOLEAN;
  28.         myEvent : EventRecord;
  29.         wRecord : WindowRecord;
  30.         Windowport : Windowptr;
  31.         whichWindow : Windowptr;
  32.         UpdateWindow : Windowptr;
  33.         windowsize : longint;
  34.         height, width : integer;
  35.         sizeRect, size, dragRect : Rect;
  36.         valid, screenprinted : boolean;
  37.         prRecHdl : THPrint;
  38.         printmgr : boolean;
  39.         myPrPort : TPPrPort;
  40.         myStRec : TPrStatus;
  41.         P : ARRAY[1..15] OF longint;
  42.         pheight : longint;
  43.         pwidth : longint;
  44.         Ptype : integer;
  45.  
  46.     PROCEDURE SetUpMenus;
  47.         VAR
  48.             i : INTEGER;
  49.     BEGIN
  50.         myMenus[appleMenu] := NewMenu(AppleID, chr(appleMark));
  51.         AddResMenu(myMenus[appleMenu], 'DRVR');
  52.         myMenus[fileMenu] := NewMenu(fileID, 'File ');
  53.         appendmenu(myMenus[fileMenu], '(Print to screen;Print to printer;Page Setup;Job Setup;(-;Clear Screen;Quit/Q');
  54.         FOR i := 1 TO menuCount DO
  55.             InsertMenu(myMenus[i], 0);
  56.         DrawMenuBar;
  57.     END;
  58.  
  59.     PROCEDURE openprintmgr;
  60.     BEGIN
  61.         PrOpen;
  62.         prRecHdl := THPrint(NewHandle(SIZEOF(TPrint)));
  63.         printmgr := true;
  64.         EnableItem(myMenus[fileMenu], printscr);
  65.     END;
  66.  
  67.     PROCEDURE getprintinfo;
  68.     BEGIN
  69.         P[1] := prRecHdl^^.iPrVersion; { Print Manager version}
  70.         P[2] := prRecHdl^^.prInfo.iVRes; { Vertical resolution}
  71.         P[3] := prRecHdl^^.prInfo.iHRes; { Horizontal resolution}
  72.         P[4] := prRecHdl^^.prInfo.rPage.top; { Page Rectangle}
  73.         P[5] := prRecHdl^^.prInfo.rPage.left;
  74.         P[6] := prRecHdl^^.prInfo.rPage.bottom;
  75.         P[7] := prRecHdl^^.prInfo.rPage.right;
  76.         P[8] := prRecHdl^^.rPaper.top; { Paper Rectangle}
  77.         P[9] := prRecHdl^^.rPaper.left;
  78.         P[10] := prRecHdl^^.rPaper.bottom;
  79.         P[11] := prRecHdl^^.rPaper.right;
  80.         pheight := ((P[10] - P[8]) * 120 DIV P[2]); { Paper height}
  81.         pwidth := ((P[11] - P[9]) * 120 DIV P[3]);{ Paper width}
  82.         Ptype := (prRecHdl^^.prStl.wDev); {printer type}
  83.         Ptype := (BitAnd(Ptype, 65280) DIV 256);
  84.         P[12] := prRecHdl^^.prJob.iFstPage; { First page}
  85.         P[13] := prRecHdl^^.prJob.iLstPage; { Last page}
  86.         P[14] := prRecHdl^^.prJob.iCopies; { # of copies}
  87.     END;
  88.  
  89.     PROCEDURE printinfo;
  90.     BEGIN
  91.         Getprintinfo;
  92.         textfont(monaco);
  93.         textsize(9);
  94.         moveto(20, 20);
  95.         WriteDraw('Print Manager Version');
  96.         moveto(150, 20);
  97.         WriteDraw(P[1]);
  98.         moveto(20, 30);
  99.         WriteDraw('Vertical resolution');
  100.         moveto(150, 30);
  101.         WriteDraw(P[2]);
  102.         moveto(20, 40);
  103.         WriteDraw('Horizontal resolution');
  104.         moveto(150, 40);
  105.         WriteDraw(P[3]);
  106.         moveto(20, 50);
  107.         WriteDraw('Page Rectangle');
  108.         moveto(150, 50);
  109.         WriteDraw(P[4], P[5], P[6], P[7]);
  110.         moveto(20, 60);
  111.         WriteDraw('Papar Rectangle');
  112.         moveto(150, 60);
  113.         WriteDraw(P[8], P[9], P[10], P[11]);
  114.         moveto(20, 70);
  115.         WriteDraw('Paper height');
  116.         moveto(150, 70);
  117.         WriteDraw(pheight);
  118.         moveto(20, 80);
  119.         WriteDraw('Paper width');
  120.         moveto(150, 80);
  121.         WriteDraw(pwidth);
  122.         moveto(20, 90);
  123.         WriteDraw('Printer type');
  124.         moveto(150, 90);
  125.         WriteDraw(Ptype);
  126.         moveto(20, 100);
  127.         WriteDraw('First Page');
  128.         moveto(150, 100);
  129.         WriteDraw(P[12]);
  130.         moveto(20, 110);
  131.         WriteDraw('Last Page');
  132.         moveto(150, 110);
  133.         WriteDraw(P[13]);
  134.         moveto(20, 120);
  135.         WriteDraw('# of copies');
  136.         moveto(150, 120);
  137.         WriteDraw(P[14]);
  138.     END;
  139.  
  140.     PROCEDURE DrawingProc;
  141.     BEGIN
  142.         framerect(myPrPort^.gPort.portRect);
  143.         printinfo;
  144.     END;
  145.  
  146.     PROCEDURE DoCommand (mResult : LONGINT);
  147.         VAR
  148.             theItem : INTEGER;
  149.             theMenu : INTEGER;
  150.             name : Str255;
  151.             temp, i : INTEGER;
  152.     BEGIN
  153.         theItem := LoWord(mResult);
  154.         theMenu := HiWord(mResult);
  155.         CASE theMenu OF
  156.             appleID : 
  157.                 BEGIN
  158.                     GetItem(myMenus[appleMenu], theItem, name);
  159.                     temp := OpenDeskAcc(name);
  160.                     SetPort(Windowport);
  161.                 END;
  162.             fileID : 
  163.                 CASE theItem OF
  164.                     printscr : 
  165.                         BEGIN
  166.                             IF printmgr THEN
  167.                                 BEGIN
  168.                                     SetPort(Windowport);
  169.                                     eraserect(Windowport^.portrect);
  170.                                     FrameRect(Windowport^.portrect);
  171.                                     printinfo;
  172.                                     validRect(Windowport^.PortRect);
  173.                                     screenprinted := true;
  174.                                 END;
  175.                         END; { printscr}
  176.  
  177.                     printptr : 
  178.                         BEGIN
  179.                             IF NOT printmgr THEN
  180.                                 openprintmgr;
  181.                             valid := PrJobDialog(prRecHdl);
  182.                             IF valid THEN
  183.                                 BEGIN
  184.                                     myPrPort := PrOpenDoc(prRecHdl, NIL, NIL);
  185.                                     IF PrError = noErr THEN
  186.                                         BEGIN
  187.                                             PrOpenPage(myPrPort, NIL);
  188.                                             IF PrError = noErr THEN
  189.                                                 DrawingProc;
  190.                                             PrClosePage(myPrPort);
  191.                                         END;
  192.                                     PrCloseDoc(myPrPort);
  193.                                     IF (prRecHdl^^.prJob.bjDocLoop = bSpoolLoop) AND (PrError = noErr) THEN
  194.                                         PrPicFile(prRecHdl, NIL, NIL, NIL, myStRec);
  195.                                 END;
  196.                         END;
  197.                     Jobsetup : 
  198.                         BEGIN
  199.                             IF NOT printmgr THEN
  200.                                 openprintmgr;
  201.                             valid := PrJobDialog(prRecHdl);
  202.                         END;
  203.                     pagesetup : 
  204.                         BEGIN
  205.                             IF NOT printmgr THEN
  206.                                 openprintmgr;
  207.                             valid := PrStlDialog(prRecHdl);
  208.                         END;
  209.                     clrscr : 
  210.                         BEGIN
  211.                             eraserect(Windowport^.portrect);
  212.                             screenprinted := false;
  213.                         END;
  214.                     quit : 
  215.                         BEGIN
  216.                             IF printmgr THEN
  217.                                 BEGIN
  218.                                     PrClose;
  219.                                     printmgr := false;
  220.                                 END;
  221.                             doneFlag := TRUE;
  222.                         END;
  223.                     OTHERWISE
  224.                         ;
  225.                 END; {itemCase}
  226.             OTHERWISE
  227.                 ;
  228.         END; { menuCase }
  229.         SetPort(Windowport);
  230.         HiliteMenu(0);
  231.     END;
  232.  
  233. BEGIN
  234.     InitGraf(@thePort);
  235.     InitFonts;
  236.     FlushEvents(everyEvent, 0);
  237.     InitWindows;
  238.     InitMenus;
  239.     InitDialogs(NIL);
  240.     InitCursor;
  241.     SetRect(sizeRect, 50, 50, 450, 300);
  242.     dragRect := sizeRect;
  243.     doneFlag := FALSE;
  244.     printmgr := false;
  245.     screenprinted := false;
  246.     Windowport := Newwindow(@wRecord, sizeRect, '', true, plainDBox, POINTER(-1), false, 0);
  247.     SetPort(Windowport);
  248.     SetUpMenus;
  249.     REPEAT
  250.         SystemTask;
  251.         IF GetNextEvent(everyEvent, myEvent) THEN
  252.             CASE myEvent.what OF
  253.                 mouseDown : 
  254.                     CASE FindWindow(myEvent.where, whichWindow) OF
  255.                         inDesk : 
  256.                             ; {Not used}
  257.                         inMenuBar : 
  258.                             DoCommand(MenuSelect(myEvent.where));
  259.                         inSysWindow : 
  260.                             SystemClick(myEvent, whichWindow);
  261.                         inContent : 
  262.                             BEGIN
  263.                                 IF whichWindow <> FrontWindow THEN
  264.                                     SelectWindow(whichWindow)
  265.                                 ELSE
  266.                                     BEGIN
  267.                                         GlobalToLocal(myEvent.where);
  268.                                         extended := BitAnd(myEvent.modifiers, shiftKey) <> 0;
  269.                                     END;
  270.                             END;
  271.                         inDrag : 
  272.                             ; {Not used}
  273.                         inGrow : 
  274.                             ; {Not used}
  275.                         inGoAway : 
  276.                             ; {Not used}
  277.                     END;
  278.                 mouseUp : 
  279.                     ; {Not used}
  280.                 keydown, autokey : 
  281.                     BEGIN
  282.                         theChar := CHR(BitAnd(myEvent.message, charCodeMask));
  283.                         IF BitAnd(myEvent.modifiers, cmdKey) <> 0 THEN
  284.                             DoCommand(MenuKey(theChar));
  285.                     END;
  286.                 keyUp : 
  287.                     ; {Not used}
  288.                 updateEvt : 
  289.                     IF screenprinted THEN
  290.                         BEGIN
  291.                             UpdateWindow := WindowPtr(myEvent.message);
  292.                             BeginUpdate(UpdateWindow);
  293.                             SetPort(UpdateWindow);
  294.                             eraserect(UpdateWindow^.portrect);
  295.                             FrameRect(UpdateWindow^.portrect);
  296.                             printinfo;
  297.                             EndUpdate(UpdateWindow);
  298.                         END;
  299.                 diskEvt : 
  300.                     ; {Not used}
  301.                 activateEvt : 
  302.                     ; {Not used}
  303.                 networkEvt : 
  304.                     ; {Not used}
  305.                 driverEvt : 
  306.                     ; {Not used}
  307.                 app1Evt : 
  308.                     ; {Not used}
  309.                 app2Evt : 
  310.                     ; {Not used}
  311.                 app3Evt : 
  312.                     ; {Not used}
  313.                 OTHERWISE
  314.                     ;
  315.             END;
  316.     UNTIL doneFlag;
  317. END.